package org.fujay.langchain4jserver.domain.application.repository;

import org.fujay.langchain4jserver.domain.application.entity.AppConfigHistory;
import org.fujay.langchain4jserver.domain.application.vo.AppId;
import org.fujay.langchain4jserver.domain.application.vo.Version;

import java.util.List;
import java.util.Optional;

/**
 * 应用配置历史仓储接口
 */
public interface AppConfigHistoryRepository {

    /**
     * 保存单条历史记录 (由 AppRepository 调用)
     *
     * @param history 历史记录实体
     */
    void save(AppConfigHistory history);

    /**
     * 根据应用ID查找所有历史记录
     *
     * @param appId 应用ID
     * @return 历史记录列表 (应按版本降序)
     */
    List<AppConfigHistory> findByAppId(AppId appId);

    /**
     * 根据应用ID和版本查找特定历史记录
     *
     * @param appId   应用ID
     * @param version 版本号
     * @return 历史记录 Optional
     */
    Optional<AppConfigHistory> findByAppIdAndVersion(AppId appId, Version version);

    /**
     * 查找指定应用的最大版本号
     *
     * @param appId 应用ID
     * @return 最大版本 Optional
     */
    Optional<Version> findMaxVersionByAppId(AppId appId);

    /**
     * 根据应用ID删除所有历史记录
     *
     * @param appId 应用ID
     */
    void deleteByAppId(AppId appId);
}
